`ifndef __ysyx_23060189_ISA_HEADER__
  `define __ysyx_23060189_ISA_HEADER__

  /* 命令 */
  `define ysyx_23060189_ISA_OP_W 7
  `define ysyx_23060189_IsaOpBus 6:0
  `define ysyx_23060189_IsaOpOps 6:0

  `define ysyx_23060189_ISA_FUNCT3_W 3
  `define ysyx_23060189_IsaFunct3Bus 2:0
  `define ysyx_23060189_IsaFunct3Ops 14:12

  `define ysyx_23060189_ISA_FUNCT7_W 7
  `define ysyx_23060189_IsaFunct7Bus 6:0
  `define ysyx_23060189_IsaFunct7Ops 31:25

  `define ysyx_23060189_IsaRs1Ops 19:15
  `define ysyx_23060189_IsaRs2Ops 24:20
  `define ysyx_23060189_IsaRdOps 11:7

  `define ysyx_23060189_ISA_SHAMT_W 5
  `define ysyx_23060189_IsaShamtBus 4:0
  `define ysyx_23060189_IsaShamtOps 4:0

  // 指令类型
  `define ysyx_23060189_ISA_R_TYPE 3'b000
  `define ysyx_23060189_ISA_I_TYPE 3'b001
  `define ysyx_23060189_ISA_S_TYPE 3'b010
  `define ysyx_23060189_ISA_B_TYPE 3'b011
  `define ysyx_23060189_ISA_U_TYPE 3'b100
  `define ysyx_23060189_ISA_J_TYPE 3'b101

  /* 指令 */

  //                                    fuct7    func3    opecode
  `define ysyx_23060189_ISA_LUI                          7'b0110111
  `define ysyx_23060189_ISA_AUIPC                        7'b0010111
  `define ysyx_23060189_ISA_JAL                          7'b1101111

  `define ysyx_23060189_ISA_JALR   {             3'b000, 7'b1100111}
  `define ysyx_23060189_ISA_BEQ    {             3'b000, 7'b1100011}
  `define ysyx_23060189_ISA_BNE    {             3'b001, 7'b1100011}
  `define ysyx_23060189_ISA_BLT    {             3'b100, 7'b1100011}
  `define ysyx_23060189_ISA_BGE    {             3'b101, 7'b1100011}
  `define ysyx_23060189_ISA_BLTU   {             3'b110, 7'b1100011}
  `define ysyx_23060189_ISA_BGEU   {             3'b111, 7'b1100011}
  `define ysyx_23060189_ISA_LB     {             3'b000, 7'b0000011}
  `define ysyx_23060189_ISA_LH     {             3'b001, 7'b0000011}
  `define ysyx_23060189_ISA_LW     {             3'b010, 7'b0000011}
  `define ysyx_23060189_ISA_LBU    {             3'b100, 7'b0000011}
  `define ysyx_23060189_ISA_LHU    {             3'b101, 7'b0000011}
  `define ysyx_23060189_ISA_SB     {             3'b000, 7'b0100011}
  `define ysyx_23060189_ISA_SH     {             3'b001, 7'b0100011}
  `define ysyx_23060189_ISA_SW     {             3'b010, 7'b0100011}
  `define ysyx_23060189_ISA_ADDI   {             3'b000, 7'b0010011}
  `define ysyx_23060189_ISA_SLTI   {             3'b010, 7'b0010011}
  `define ysyx_23060189_ISA_SLTIU  {             3'b011, 7'b0010011}
  `define ysyx_23060189_ISA_XORI   {             3'b100, 7'b0010011}
  `define ysyx_23060189_ISA_ORI    {             3'b110, 7'b0010011}
  `define ysyx_23060189_ISA_ANDI   {             3'b111, 7'b0010011}

  `define ysyx_23060189_ISA_SLLI   { 7'b0000000, 3'b001, 7'b0010011}
  `define ysyx_23060189_ISA_SRLI   { 7'b0000000, 3'b101, 7'b0010011}
  `define ysyx_23060189_ISA_SRAI   { 7'b0100000, 3'b101, 7'b0010011}

  `define ysyx_23060189_ISA_ADD    { 7'b0000000, 3'b000, 7'b0110011}
  `define ysyx_23060189_ISA_SUB    { 7'b0100000, 3'b000, 7'b0110011}
  `define ysyx_23060189_ISA_SLL    { 7'b0000000, 3'b001, 7'b0110011}
  `define ysyx_23060189_ISA_SLT    { 7'b0000000, 3'b010, 7'b0110011}
  `define ysyx_23060189_ISA_SLTU   { 7'b0000000, 3'b011, 7'b0110011}
  `define ysyx_23060189_ISA_XOR    { 7'b0000000, 3'b100, 7'b0110011}
  `define ysyx_23060189_ISA_SRL    { 7'b0000000, 3'b101, 7'b0110011}
  `define ysyx_23060189_ISA_SRA    { 7'b0100000, 3'b101, 7'b0110011}
  `define ysyx_23060189_ISA_OR     { 7'b0000000, 3'b110, 7'b0110011}
  `define ysyx_23060189_ISA_AND    { 7'b0000000, 3'b111, 7'b0110011}

  `define ysyx_23060189_ISA_ECALL  32'b00000000000000000000000001110011
  `define ysyx_23060189_ISA_EBREAK 32'b00000000000100000000000001110011
  `define ysyx_23060189_ISA_MRET   32'b00110000001000000000000001110011

  `define ysyx_23060189_ISA_CSRRW  {             3'b001, 7'b1110011}
  `define ysyx_23060189_ISA_CSRRS  {             3'b010, 7'b1110011}

`endif
